JPA এর Inheritance কনসেপ্ট এবং প্রয়োজনীয়তা

Java Technologies - স্প্রিং বুট জেপিএ (Spring Boot JPA) - JPA Inheritance Mapping
350

JPA Inheritance কি?

JPA Inheritance হলো একটি কনসেপ্ট যা Object-Relational Mapping (ORM) এর মাধ্যমে অবজেক্টের বিভিন্ন শ্রেণি (classes) এর মধ্যে সম্পর্ক স্থাপন করে। JPA-এ Inheritance ব্যবহৃত হয় একটি বেস ক্লাস থেকে ডেরাইভড (derived) ক্লাস গুলি তৈরি করার জন্য। এই কনসেপ্টটি সাধারণত inheritance hierarchy গঠন করতে ব্যবহৃত হয়, যেখানে প্যারেন্ট ক্লাসের প্রপার্টি এবং মেথড গুলি সাবক্লাসের মধ্যে উত্তরাধিকারী হয়ে থাকে।

JPA Inheritance-এ তিনটি প্রধান স্ট্র্যাটেজি রয়েছে:

  1. Single Table Inheritance (STI)
  2. Joined Table Inheritance (JTI)
  3. Table Per Class Inheritance (TPC)

এগুলি JPA Entity ক্লাসের মধ্যে ইনহেরিটেন্স কনফিগারেশন করার বিভিন্ন উপায় প্রদান করে।


JPA Inheritance স্ট্র্যাটেজি

১. Single Table Inheritance (STI)

Single Table Inheritance (STI) স্ট্র্যাটেজিতে সমস্ত ইনহেরিটেড ক্লাসের ডেটা একটি টেবিলেই স্টোর করা হয়। এখানে সব সাবক্লাসের জন্য একটি সাধারণ টেবিল ব্যবহার করা হয় এবং একটি discriminator column ব্যবহৃত হয়, যা নির্ধারণ করে কোন রেকর্ড কোন সাবক্লাসের অন্তর্গত। এই স্ট্র্যাটেজি পারফরম্যান্সে দ্রুত কিন্তু কিছু সময় ডেটা পুনরাবৃত্তি হতে পারে।

উদাহরণ:

import javax.persistence.*;

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "employee_type")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    // Getters and Setters
}

@Entity
@DiscriminatorValue("FULL_TIME")
public class FullTimeEmployee extends Employee {
    private double salary;

    // Getters and Setters
}

@Entity
@DiscriminatorValue("PART_TIME")
public class PartTimeEmployee extends Employee {
    private double hourlyRate;

    // Getters and Setters
}

এখানে, Employee হল প্যারেন্ট ক্লাস এবং FullTimeEmployee এবং PartTimeEmployee হল সাবক্লাস। @DiscriminatorColumn অ্যানোটেশনটি নির্দেশ করে যে ডাটাবেসে একাধিক ধরনের ডাটা রাখা হবে, এবং @DiscriminatorValue এর মাধ্যমে প্রতিটি সাবক্লাসের জন্য আলাদা মান নির্ধারণ করা হবে।

ডাটাবেস টেবিল

idnameemployee_typesalaryhourlyRate
1John DoeFULL_TIME50000NULL
2Jane SmithPART_TIMENULL20

২. Joined Table Inheritance (JTI)

Joined Table Inheritance স্ট্র্যাটেজিতে প্রতিটি সাবক্লাসের জন্য একটি আলাদা টেবিল তৈরি করা হয় এবং প্যারেন্ট ক্লাসের টেবিলের সাথে join করা হয়। এই স্ট্র্যাটেজি ডেটার পুনরাবৃত্তি এড়াতে সাহায্য করে, কিন্তু এতে কিছু পারফরম্যান্স কমে যেতে পারে কারণ টেবিলের মধ্যে জয়েন অপারেশন প্রয়োজন।

উদাহরণ:

import javax.persistence.*;

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    // Getters and Setters
}

@Entity
public class FullTimeEmployee extends Employee {
    private double salary;

    // Getters and Setters
}

@Entity
public class PartTimeEmployee extends Employee {
    private double hourlyRate;

    // Getters and Setters
}

ডাটাবেস টেবিল

  1. Employee Table
    | id | name | |----|-----------| | 1 | John Doe | | 2 | Jane Smith|
  2. FullTimeEmployee Table
    | id | salary | |----|---------| | 1 | 50000 |
  3. PartTimeEmployee Table
    | id | hourlyRate | |----|------------| | 2 | 20 |

এখানে, FullTimeEmployee এবং PartTimeEmployee টেবিল প্যারেন্ট ক্লাস Employee টেবিলের সাথে যোগ (join) করা হয়।


৩. Table Per Class Inheritance (TPC)

Table Per Class Inheritance স্ট্র্যাটেজিতে প্রতিটি সাবক্লাসের জন্য আলাদা টেবিল তৈরি হয় এবং এসব টেবিলের মধ্যে কোনো যোগ (join) নেই। এটি সাধারণত পারফরম্যান্সের জন্য উপকারী, কারণ এখানে ডাটাবেসের টেবিলগুলো স্বাধীন থাকে, কিন্তু এতে কিছু ডুপ্লিকেট ডেটা থাকতে পারে।

উদাহরণ:

import javax.persistence.*;

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    // Getters and Setters
}

@Entity
public class FullTimeEmployee extends Employee {
    private double salary;

    // Getters and Setters
}

@Entity
public class PartTimeEmployee extends Employee {
    private double hourlyRate;

    // Getters and Setters
}

ডাটাবেস টেবিল

  1. Employee Table
    | id | name | |----|-----------| | 1 | John Doe | | 2 | Jane Smith|
  2. FullTimeEmployee Table
    | id | name | salary | |----|-----------|--------| | 1 | John Doe | 50000 |
  3. PartTimeEmployee Table
    | id | name | hourlyRate | |----|------------|------------| | 2 | Jane Smith | 20 |

এখানে, প্রতিটি সাবক্লাসের জন্য আলাদা টেবিল তৈরি করা হয়েছে, যেখানে Employee ক্লাসের সাধারণ তথ্য প্রতিটি টেবিলেই কপি করা হয়েছে।


JPA Inheritance এর প্রয়োজনীয়তা

  1. Code Reusability:
    ইনহেরিটেন্সের মাধ্যমে একাধিক ক্লাস একই বৈশিষ্ট্য বা প্রপার্টি শেয়ার করতে পারে, যা কোড পুনঃব্যবহারযোগ্য করে তোলে এবং সিস্টেমের মধ্যে ডুপ্লিকেট কোড কমিয়ে আনে।
  2. Modeling Real-World Entities:
    ইনহেরিটেন্সের মাধ্যমে আপনি বাস্তব জগতের সম্পর্কগুলো যথাযথভাবে মডেল করতে পারেন। যেমন Employee ক্লাসের মাধ্যমে আপনি সাধারণ কর্মচারী মডেল করতে পারেন, এবং তারপর FullTimeEmployee এবং PartTimeEmployee দিয়ে বিশেষ ধরনের কর্মচারী মডেল করতে পারেন।
  3. Data Integrity:
    ইনহেরিটেন্স ব্যবহার করলে ডাটাবেসের নকশা পরিষ্কার এবং কাস্টমাইজযোগ্য হয়। Joined বা Single Table স্ট্র্যাটেজি ব্যবহার করলে ডেটা পুনরাবৃত্তি কমানো যায় এবং ডেটার ইন্টিগ্রিটি বজায় থাকে।
  4. Simplified Database Design:
    Inheritance ব্যবহার করলে সম্পর্কিত ডেটা সংরক্ষণ সহজ হয় এবং ডাটাবেস নকশা আরো পরিষ্কার এবং সংহত হয়।

সারাংশ

JPA-এ Inheritance ব্যবহারের মাধ্যমে আপনি ক্লাসের মধ্যে সম্পর্ক স্থাপন করতে পারেন এবং Single Table Inheritance, Joined Table Inheritance, এবং Table Per Class Inheritance স্ট্র্যাটেজি অনুসারে ডাটাবেস টেবিলের সাথে Entity গুলি ম্যাপ করতে পারেন। ইনহেরিটেন্স ডেটাবেস ডিজাইনে কোড পুনঃব্যবহার, ডেটার ইন্টিগ্রিটি এবং বাস্তব জগতের মডেলিংয়ের সুবিধা প্রদান করে। JPA Inheritance ব্যবহারের মাধ্যমে আপনি বিভিন্ন ধরনের সম্পর্ক এবং অবজেক্ট মডেলিং খুব সহজেই করতে পারেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...